package 二分算法;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;

/**
 * https://leetcode.cn/problems/sqrtx/description/
 * x的平方根
 */
public class likou69 {

    // 暴力枚举O(n) 二分是O(logN)
    // 根据题目要求 答案是<= 得出是查找区间的右端点 (左端点也行, 但是要多一步判断)
    // <=t 和 >t. 答案在左边那个区间, 是右端点
    public int mySqrt(int x) {
        // int left = 0, right = x;
        long left = 0, right = x;
        while(left < right) {
            // int mid = left + (right - left + 1) / 2;
            long mid = left + (right - left + 1) / 2;
            if(mid * mid <= x) left = mid;
            else right = mid - 1;
        }
        return (int)left;
    }


    public static void main2(String[] args) {
        // 假设我们有一个包含日期和时间的字符串
        String dateTimeString = "2023-10-01";
        // Date date = new Date("2023-10-01");

        // 创建一个DateTimeFormatter对象，指定日期和时间的格式
        // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd+HH:mm:ss");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 使用LocalDateTime.parse方法解析字符串为LocalDateTime对象
        LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);

        // 输出解析后的日期和时间
        System.out.println(dateTime); // 输出: 2023-10-01T14:30  没有秒了

//        // 如果你只需要日期部分，可以这样做
//        java.time.LocalDate date = dateTime.toLocalDate();
//        System.out.println(date); // 输出: 2023-10-01
    }

    public static void main11(String[] args) {
        String dateTimeString = "2023-10-01 14:30:00";

        // 定义日期时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        try {
            // 解析日期时间字符串
            LocalDateTime localDateTime = LocalDateTime.parse(dateTimeString, formatter);

            // 转换为 java.util.Date
            Date date = convertToLocalDateTime(localDateTime);

            System.out.println(date); // 输出转换后的 Date 对象
        } catch (Exception e) {
            System.err.println("Invalid date-time format: " + dateTimeString);
            e.printStackTrace();
        }
    }

    private static Date convertToLocalDateTime(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(TimeZone.getDefault().toZoneId()).toInstant());
    }

    public static void main33(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("123", "2");
        map.put("beginTime", "12:00:00 00:00:00");
        System.out.println(map);
    }

    public static void main(String[] args) {
        // 定义日期时间字符串
        String beginTime = "2023-03-15 14:06:16";
        String endTime = "2024-09-04 16:28:24";

        // 定义日期时间格式，并指定时区
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // 指定时区为 UTC

        try {
            // 解析日期时间字符串
            Date beginDate = sdf.parse(beginTime);
            Date endDate = sdf.parse(endTime);

            // 输出转换后的 Date 对象
            System.out.println("Begin Time: " + beginDate);
            System.out.println("End Time: " + endDate);
        } catch (ParseException e) {
            // 处理解析异常
            e.printStackTrace();
        }
    }

}
